- 프로덕션 환경에 배포하는 상황
- 프로세스와 아키텍처의 구분
- 프로세스
- 개발자와 운영자가 협업하던 방식
- CICD를 통한 자동화와 긴밀한 협업으로 빠른 배포 프로세스
- 아키텍처
- 클라우드 기술 진화와 함께 경량화
- 자동화 촉진
- 서버리스 서비스까지 등장하여 클라우드 리소스를 동적으로 할당
- 패턴의 필요성
- 분산 어플리케이션
- 다양한 단위의 등장으로 인해 최적의 방식 구상 필요
- 확장성
- 유지보수
- 많은 가동 부품으로 인해 수작업 배포 실질적 불가
- 각종 운영의 어려움을 해소할 수단 필요
- 최신 기술 도입
- 고속화된 배포 프로세스로 기술 부채 줄일 필요
- 패턴
- 호스트별 다중 서비스 인스턴스
- 한 대의 호스트에서 여러 서비스 운영
- 호스트 관리 용이
- 가상화 환경에서는 하나의 가상 머신일수록 리소스는 줄일 수 있음
- 모니터링, 장애 관리 어려움
- 장애 지점이 전체에 퍼질 위험
- 호스트별 단일 서비스 인스턴스
- 호스트에 의존된 건 단일 서비스
- 특정 호스트 정지 시에도 영향은 하나의 서비스만
- 시스템 전체 복잡도 감소
- 비용 측면 부담
- VM별 서비스 인스턴스
- 하이퍼바이저 가상 머신 활용
- 컨테이너보다 많은 리소스
- 클라우드 환경에서는 보통 패키징된 가상 머신 이미지를 제공
- 적은 서비스일 경우 오히려 좋을 수도
- 사전 설치된 종속 환경에 의해 배포 용이
- 유지 보수 용이
- 서비스 인스턴스 분리 가능
- 배포에 시간 소요되고 리소스 비효율
- 시스템 관리 비용 향상
- 컨테이너별 서비스 인스턴스
- 컨테이너 이미지 형태로 배포
- 서버리스와 달리 범용적 프로그래밍 언어 사용
- Kubernetes로 대량의 컨테이너 관리 가능
- 빠른 배포와 높은 리소스 효율
- 이동성
- 구축 및 운영 어려움
- 서버리스 배포
- 퍼블릭 클라우드의 서비스 이용
- 클라우드 업체에게 보안, 유지보수 위임
- 관리 운영 불필요, 부하에 따라 효율적 리소스 관리
- 서비스 요청량에 따른 과금 부담
- 프로비저닝 속도에 따른 지연
- 상품에 따른 모델 제한